package org.rendersnake;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringEscapeUtils;
import org.rendersnake.internal.CharactersWriteable;
/**
*
* Usage:
* <pre>new Hash("key","value","bool",true,"int,42,....)
*
* toJavascript()
* {key:'value',bool:true,int:42}
*
* toAttributesString()
* key="value" bool="true" int="42"
* </pre>
*
* @author e.micklei
*/
public class Hash implements CharactersWriteable , ToJavascript {
public Map<Object,Object> map = new HashMap<Object,Object>();
public Hash(Object... args) {
if (args.length % 2 == 1) {
throw new IllegalArgumentException("Missing value");
}
for (int i = 0; i < args.length - 1; i = i + 2) {
map.put(args[i], args[i + 1]);
}
}
public Hash put(Object key,Object value) {
map.put(key,value);
return this;
}
public String toJavascript() {
StringBuilder sb = new StringBuilder();
sb.append('{');
boolean separate = false;
for (Object each : map.keySet()) {
if (separate)
sb.append(',');
else
separate = true;
sb
.append(each)
.append(':');
Object value = map.get(each);
if (value instanceof String)
sb.append('\'')
.append(StringEscapeUtils.escapeXml((String)value))
.append('\'');
else
sb.append(value);
}
sb.append('}');
return sb.toString();
}
public String toString() {
return this.toJavascript();
}
public String asCharSequence() {
StringBuilder sb = new StringBuilder();
sb.append(' ');
boolean separate = false;
for (Object each : map.keySet()) {
if (separate)
sb.append(' ');
else
separate = true;
sb
.append(each)
.append('=')
.append('"').append(StringEscapeUtils.escapeXml(map.get(each).toString())).append('"');
}
return sb.toString();
}
public void writeCharsOn(Writer writer) throws IOException {
writer.append(' ');
boolean separate = false;
for (Object each : map.keySet()) {
if (separate)
writer.append(' ');
else
separate = true;
writer
.append((String)each)
.append('=')
.append('"').append(StringEscapeUtils.escapeXml(map.get(each).toString()))
.append('"');
}
}
}